Unite2018.day2


おもろかった。参加したやつを順に。


誘導ミサイル完全マスター

C#でシミュレータを作るといいかも。動いたらComputeShaderに移動していく。

・生成時にランダムを入れるようにすると便利

並列化された状態でランダムを作ろうとすると大変


・絶対時刻で管理

並列化された状態のアレ。


・爆発距離

当たったところからの距離をとって、音を鳴らすのに使ったりする。



ターゲットにミサイルがぶつかった -> ターゲットに命中を通知する

ComputeBuffer.GetData()でデータをとる。

GPUはそのまま値を返せない。ので、CPUはGPUが値を返すまで停止する。


AsyncGPUReadback

非同期! ただしWindows限定。


描画バウンド

GPUは速いんだけど、どうせ描画がボトルネックになる。

-> カメラの近くのミサイルを移す、距離をとって近いものをN個まで描画する、とか。


Frustam、平面との距離。


位置、距離計算をComputeBufferで扱い、描画する対象を制限する。そのための情報も持つ。




メタルバッファ、トリプルなんで三色、これが綺麗に並んでない場合、綺麗に動いてない。

iPhone6で、ちょうどGetDataのタイミングとして使えるものがあった。安定化はむずかしそう。が、

2fに一回、2フレーム分を取り出すことで効率化した。


-> 実際に使ったAPIはLateUpdate。で、毎フレーム実行すると、GetDataが遅かった時のCPUの荒れを次のフレームでもひきずってしまって辛かった。

ので、2fに一回にすることで、GetDataの荒れを解消できた。

ただ公演でもおっしゃっていたが大道芸なので、iOSとかで使いたい場合、素直に2018.2で出るのを待つのがいいのでは、とのこと。



ユニティちゃんシェーダ2

カラー設定を直接指定できる

-> 好みのカラーを配置できる。


線をくっきり出す、ソーベルカラーフィルタを開発。



暁さん

HighColorMaskを使って、例えば金属だけにSpecularが出るようにしたい。

-> スペキュラマップを使って、光沢が出て欲しい部分だけに色を使った。


フォトショでレイヤ作ってやってるよね -> レイヤもう一枚作る、みたいな。


RimLightMaskについても同様、スカートの中に入らないようにしたり。顔に出ないようにしたり。

-> 顔は、表情で頂点が移動するので、当たらないようにしている。

輪郭のシワとかをリムライトで描くというのにチャレンジしてる。


ローポリだとアウトラインそのままで出すとつらい -> OutlineSamplerで特定の頂点だけお線が出る強さを調整することができる。

頂点カラーを生成 -> テクスチャに焼き出す、とかすると、楽に調整できるよ。



あいんつばいさん

光らせる話。

PostProcessingStackのBloomを設定。

RimlightFeather

テクスチャにしっかりした線を描かずに、金属の表現をする。


ブレードにテクスチャを入れる、カラーマップ上にHDRで加算される。



京野さん

横から見た口をいい感じにマンガチックに出したい


サーフェスピアッシングなら、、

髪の上に眉を描けるなら、口でもできるんじゃない?


UTSではステンシル機能として実装している。

-> できた

が、貫通する問題が出たんで、遮蔽シールドを内側に貼ってDone


-> 法線をUnity上で編集できるんでいけるのでは



アスクザスピーカーで話してみた

Unity 小林さん。

その辺の会社のグラフィッカーさんとかがTAになるルートが欲しい、みたいな話をした。

ワイ「shader関連の知識は沼、一歩踏み込むと深い。UTSとかで入り口は簡単になったな~と思うんだけど」

-> それな

-> 今んとこやり遂げてしまうのは、ひたすら「こういう表現がしたい」みたいな執念が強い人。

-> Unity開発者認定試験でShader関連とかが日本語化されるんで期待してて

Expert Technical Artist:Shading & Effects https://certification.unity.com/products/expert-technical-artist-shading-effects


わーい。

その他だと、「これ以上は今は踏み込まないでいい」みたいなブレーキが欲しい、みたいな話をした。


実践的なパフォーマンス分析と最適化

実機でプロファイルしようね、ゲームの全体とか。

プロファイルツール

Editorに入ってるやつ。実験的にMonoを使って云々。


FrameDebugger

実機のものも観れるんだが。繋げば。はい。


MemoryProfiler

メモリのあれ。

Platform-specific tools

Unityに同梱されてる。



Runtimeメモリがでかすぎる

-> AssetAuditor というツールがあるんで、それを使う。

Read/Write enabledつけると2倍食うかんね

R/WTexEnabled でapplyを行うと、RAM -> GPUへとアップロードする。

mipmapがあると質量が33%増える

カメラとの距離によってテクスチャを変える場合にのみ意味がある。


画像

Crunchcompression ETCが使えるようになっている。が、極端にロードが遅いケースがある?

調査中とのこと。


Animation Curve

Legacyはカーブ数が300よりも小さい場合、有効。

が、Unity Animation Systemを使った方が効果がでるみたいなケースもありそう。


Humanoidは、retargetting と IKを使っている場合に使う。

そうでない場合、Genericを使う。


Animatorコンポーネント

CullingMode ってのがあって、選ぶとスクリーン上にないものをアニメーションしなくなる、みたいなモードがある。

画面に映っていなくても内部的に更新する、みたいなモードもあり。



GameObjectと関連したAnimator

2018から新プロパティができていて、GOが消されても状態を保持できる(GOによらない場所に保持してそう)


で、Animatorの中からGOをKillできるようになる、みたいな。


リモートプロファイリングしたいんじゃ

ask the speakerでいろいろ「こういうことやってるんだけど辛いんだが」みたいな話をさせてもらった。

-> OK、言いたいことはわかった、自分宛にメールしろ

-> した。



パーティクル・マニアクス

LoopUntilReplaced 一定値を超えると、超えた分をトランジションありで消す。

Fade Timeをセットできて、

0 -> 0.7はアルファ、その後の部分はこのシステムでのトランシジョンで使われる。


エフェクトを壁に出すには:

レイキャストから座標変換やると楽そう。


Shape Module

Edgeモードで、メッシュ頂点を起点としてパーティクルを出すことができる。

Ping-pongだと、行ったり来たりする。

頂点の位置で時間を使うような設定もできるようで、頂点が多い箇所でより滑らかに動く。



External Forces Mod

Win限定ぽい? 2018で入った。

影響を与えるパーティクルに対して指定したりできる。


LineRendererEditor

2018.2以降

手で書く -> 頂点減らす、とかができる!

UI Particle

SetVerticesDirty()をするといい感じに描画できるぽい、UI空間でのパーティクルのアップデートとか。


パーティクルのcustimCallingの話

見えるパーティクルだけを動かす、みたいな話。

・CullingGroupを作る

・target.automaticCullingEnabledをチェック

・パーティクルをグループに入れて、範囲指定をセットしてChangeStateを受け止める

・ChangeState内でオンオフを行う


こんなスクリプト

https://gist.github.com/karljj1/aa833be5c2e8a061fb1693ee0d31c915



JobSystemとの統合

高速になるよ!



その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~


iOSでの話

VirtualMemoryの話

VM -> ページに分割されている

Physical > Available by App > Appがallocateしたメモリ、他、、 Clean(readOnly)とDirty(自由にできる)

iOSはheap size限界を明示していないが、だいたい物理の2倍くらい。

iOSはvメモリをコンプレスして物理メモリを確保している。


Unityでの話

テクスチャとかのリソースはNativeメモリにガンガン搭載される。

NativeプラグインはすべてCleanに置かれる。


-> Dirtyメモリを使っているオブジェクトを減らすと良い。


どうやって計算する?



Unity Profiler

デバイス上で動かしていると、Used Total とか書いてあるとこ。


GfxDriverの数値がテクスチャサイズとかの合計(現在描画しているのを除く


何がどのくらいのメモリを食っているのがわかる。


ProfilerからAssets/とかになんか置かれているのが観れるビューがあるぽい。



MemoryProfiler

いつものメモリ見るやつ。



MemoryProfilerExtension

https://github.com/robertoardila/support-unity-memoryprofiler

これは知らなかった。

めっちゃいいのでは!!



Instruments VMTracker

Appのメモリ消費についての解析ツール。

WWDCで紹介動画とかがあったらしい。探してみて見るといいよ、使い方わかるから、とのこと。


Dirtyサイズがゼロの部分は、Cleanな領域にallocateされたものだと判断できる。まあCleanに置かれるのNativePluginとかライブラリとかなのだが。


Instruments Allocation

スタックトレースが見れるんで、そのへんで。すべてVM。

SerializedFile: AssetBundle

il2cpp_codegen_initialize: インスタンスのallocation



VM TrackerとAllocations合わせて

AllocationsのCategoryでVM: Memory *** 255 とかなってたらUnity。

ここまでのツールを組み合わせると、いい感じに答え合わせができそう。



アーティストがUnityでサクッといいビジュアルを作るテクニック講座


PostProcessingStackv2とかを使うよ。

1.適当にものを置きます

2.雨が降ってるんでhazeとかfogとかをセットします

3.PostProcessをいじります


・コントラストが出せるようなシチュエーション

・ライティングをリアルにしようと傾ける

・空気感を出すためにフォグとか出す


みたいなことをすると盛り上がる。


Tips

timelineに複数の視点を置いて、エディタ上で動かすことで他視点をテストしやすくなる。

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


このTipsクッソ便利だわ、、、それ用のツール作ろうかな。視点一個置くと勝手にTimeline生成してくれるやつ。